Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: improve robustness of device initialization on disconnect/reconnect #9

Merged
merged 32 commits into from
Dec 17, 2024

Conversation

kmontag
Copy link
Owner

@kmontag kmontag commented Dec 17, 2024

  • cleans up startup logic for more predictable device initialization
  • suppresses stray CCs which would otherwise be sent at startup and/or when switching to standalone modes
  • adds tests for disconnect/reconnect events and other device init scenarios
  • updates application python version to 3.11, following Live 12.1

kmontag added 30 commits August 19, 2024 07:18
Live's internal MIDI batching was causing sysex messages (i.e. to transition back to
hosted mode) to be sent before the background mode program change.
Also update the test framework to validate received messages more aggressively.
Adds `hardware.standalone = False` (if necessary) as part of the mode definition for
user-facing modes.
- adds an unmanaged (`None`) state for the device standalone status, and set it when the
device is in disabled mode
- always pass through disabled mode when receiving an identity response from the
controller (avoids potential failures to update devices that were quickly disconnected
and reconnected)
- when entering standalone modes, only send the standalone sysex if standalone mode
isn't already enabled
- More improvements to stabilization logic (add a separate initial vs stability delay)
- Respond to multiple identity requests from Live
- Add a `Device` class which manages the active mido I/O port
- Remove `loop` fixture and migrate to more native async methods
- Add `janus` for the thread-safe asyncio queue, replacing the manual poll approach
- Various cleanup for the internal test API
The timeout behavior was needlessly complicated given the device always needs to be
fully reinitialized (i.e. sent through standalone init mode) on port changes (since we
don't know which ports are changing), defeating the purpose of trying to keep it
responsive when other devices are connected/disconnected.
@kmontag kmontag merged commit 8c08b55 into main Dec 17, 2024
4 checks passed
@kmontag kmontag deleted the connection-robustness branch December 17, 2024 08:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant